<?php
/*
	+-----------------------------------------------------------------------------------------+
	| Projeto MonitoraSUS                                                                     |
	+-----------------------------------------------------------------------------------------+
	| Copyright (c) 2005-2008 Secretaria Municipal de Saúde de Belo Horizonte / Prodabel      |
	|                                                                                         |
	| Analista Responsável: Hugo Nathaniel Rodrigues <hugonr@gmail.com>, <hugo@pbh.gov.br> |  
	|                       Consultor - GSFS - Prodabel / SMSA                                |
	| Departamento Responsável - SMSA: GPLD - Paulinho <pauloces@pbh.gov.br>                  |
	| Departamento Responsável - Prodabel: GSFS - Ricardo Monteiro <monteiro@pbh.gov.br>      |
	| Analista de Informaçao: Marcone <marcone.costa@pbh.gov.br>                              |
	+-----------------------------------------------------------------------------------------+
*/

/**
* classe OperacaoClass
* Classe para Trabalhar com operacoes do plano municipal
*
* @author Hugo Rodrigues <hugonr@gmail.com>, <hugo@pbh.com.br>
* @version $Id: class.Operacao.php,v 1.0 07/08/2008 11:55:00 Hugo $
*
* @package MonitoraSUS
*/

//Alterado dia: 26/07/2011 18:02; Por: Mauricio Marques

class OperacaoClassD{

	/**
	* contem o código da operacao
	* @var int
	* @access public
	*/
	var $numoperacao;
	var $numoperacaodistrito;
	var $banco;

	/**
	* Construtor
	* @access public
	*/
	function OperacaoClassD(){
		$this->numoperacao = "";
		$_SESSION["banco"] = $_SESSION["banco"];
		$this->numoperacaodistrito = "";
	}


	/**
	* Excluir Operacao
	* @param int $num_eixo
	* @param int $num_objetivo
	* @param int $num_diretriz
	* @param int $num_objetivoespecifico
	* @param int $num_meta
	* @param int $num_operacao
	* @param string $where
	* @param array $nivelacesso
	* @return string $msg
	* @access	public
	*/
	function excluioperacao($num_eixo, $num_objetivo, $num_diretriz, $num_objetivoespecifico, $num_meta, $num_operacao, $where, $nivelacesso, $conexao){
		if ($nivelacesso[6][3] == "S"){ 
			$sql = "select * from " . $_SESSION["banco"] . ".operacoes where num_operacao=$num_operacao";
			$resultado = pg_query( $sql);
			if (($_SESSION["fcod_unsa"] == pg_fetch_result($resultado,0,"cod_unsa_inclusao")) || ($_SESSION["fnum_nivel_acesso"] == 1)){
				$totalregistro = 0;
				$sql = "select count(*) as total from " . $_SESSION["banco"] . ".acoes where $where and num_operacao=$num_operacao";
				$resultado = pg_query( $sql);
				$totalregistro = pg_fetch_result($resultado, 0, "total");
				if ($totalregistro > 0){
					$msg = "Exclusão Cancelada - Você deve excluir todas as Atividades antes de excluir a Ação!";
				} else {
					$sql = "update " . $_SESSION["banco"] . ".operacoes set situacao='I' where $where and num_operacao=$num_operacao";
					if (pg_query( $sql)){
						$msg = "Exclusão Realizada com sucesso!";
					} else {
						$msg = "Erro ao realizar a exclusão!";
					}
				}	
			} else {
				$msg = "Você não tem permissão para excluir este registro, somente a Unidade que gerou o registro pode excluir o mesmo!";
			}
		} else {
			$msg = "Você não tem permissão para esta ação!";
		}
		return $msg;
	}


	/**
	* Inserir Operacao
	* @param int $num_eixo
	* @param int $num_objetivo
	* @param int $num_diretriz
	* @param int $num_objetivoespecifico
	* @param int $num_operacao
	* @param string $des_operacao
	* @param int $peso
	* @param string $where
	* @return string $msg
	* @access	public
	*/
	function inseriroperacao($num_eixo, $num_objetivo, $num_diretriz, $num_objetivoespecifico, $num_meta,  $where, $conexao){
		$des_descritivo = $_POST["Des_Operacao"];
		$peso = $_POST["Peso"];
		$sql = "insert into " . $_SESSION["banco"] . ".descritivos (des_descritivo, cod_unsa_inclusao, num_func_inclusao) values (";
		$sql .= "'" . decodificar($des_descritivo) . "', ";
		if ($_SESSION["fcod_unsa"] != ""){
			$sql .= $_SESSION["fcod_unsa"] . ", ";
		} else {
			$sql .= "1,";
		}
		$sql .= $_SESSION["fnum_func"] . ") ";

		if (pg_query( $sql)){
			$sql = "select num_descritivo from " . $_SESSION["banco"] . ".descritivos order by num_descritivo DESC limit 1";
			$resultado = pg_query( $sql);
			$num_descritivo = pg_fetch_result($resultado, 0, "num_descritivo");		
			$sql = "insert into " . $_SESSION["banco"] . ".operacoes (num_meta, num_descritivo, id_usuario_inclusao, data_inclusao, situacao, cod_unsa, cod_unsa_inclusao) ";
			$sql .= " values (";
			$sql .= "$num_meta, ";
			$sql .= "'$num_descritivo', ";
			$sql .= $_SESSION["fnum_func"] . ", ";
			$sql .= "now(), ";
			$sql .= "'A', ";
			if ($_SESSION["fcod_unsa"] != ""){
				$sql .= $_SESSION["fcod_unsa"] . ", ";
				$sql .= $_SESSION["fcod_unsa"] . ") ";
			} else {
				$sql .= "1,";
				$sql .= "1)";
			}

			if (pg_query( $sql)){
				$sql2 = "select num_operacao from " . $_SESSION["banco"] . ".operacoes order by num_operacao DESC limit 1";
				$resultado = pg_query( $sql2);
				$num_operacao = pg_fetch_result($resultado,0,"num_operacao");
				$msg = "Inclusão da Ação realizada com sucesso!";
				$this->numoperacao = $num_operacao;
			} else {
				$msg = "Erro ao incluir a Ação";
				$this->numoperacao = "";
			}
		} else {
			$msg = "Erro ao incluir a Ação no Módulo Descritivo.";
			$this->numoperacao = "";
		}
		return $msg;
	}
	
	/**
	 * Inserir Operacao Distrital
	 * @param int $num_eixo
	 * @param int $num_objetivo
	 * @param int $num_diretriz
	 * @param int $num_objetivoespecifico
	 * @param int $num_operacao
	 * @param string $des_operacao
	 * @param int $peso
	 * @param string $where
	 * @return string $msg
	 * @access	public
	 */
	function inserirOperacaoDistrital($num_eixo, $num_objetivo, $num_diretriz, $num_objetivoespecifico, $num_meta, $num_operacao, $where, $conexao){
		
		/*
		echo "<pre>";
		
		echo "num_eixo : $num_eixo <br/>";
		echo "num_objetivo : $num_objetivo <br/>";
		echo "num_diretriz : $num_diretriz <br/>";
		echo "num_objetivoespecifico : $num_objetivoespecifico <br/>";
		echo "num_meta : $num_meta <br/>";
		echo "num_operacao : $num_operacao <br/>";
		
		echo "<br/>";
		//print_r($_POST);
		echo "<br/>";
		print_r($_SESSION);
		echo "</pre>";
		*/
		
		$des_descritivo = $_POST["Des_Operacao"];
		$peso = $_POST["Peso"];
		
		if ( isset($_SESSION["fcod_unsa"]) && $_SESSION["fcod_unsa"] != "" ){
			$codigoUnidadeSaude = $_SESSION["fcod_unsa"];
		} else {
			$codigoUnidadeSaude = 1;
		}
		
		//echo "des_descritivo : $des_descritivo <br/>";
		
		//exit;
		
		$sql = "insert into " . $_SESSION["banco"] . ".descritivos (
					des_descritivo, 
					num_func_inclusao, 
					cod_unsa_inclusao 
				) values ( 
					'" . decodificar($des_descritivo) . "', 
					". $_SESSION["fnum_func"] .", 
					$codigoUnidadeSaude)";

		//echo $sql . "<br/>";
		//exit;
		
		if (pg_query( $sql)){
			$sql = "select 
						num_descritivo 
					from 
						" . $_SESSION["banco"] . ".descritivos 
					order by 
						num_descritivo DESC limit 1";
			
			$resultado = pg_query( $sql);
			$num_descritivo = pg_fetch_result($resultado, 0, "num_descritivo");
					
			//echo $sql . "<br/>";
			//exit;
			
			$sql = "insert into " . $_SESSION["banco"] . ".acoes_distrito (
						num_eixo,
						num_objetivo,
						num_diretriz,
						num_objetivoespecifico,
						num_meta,
						num_operacao,
						num_descritivo,
						data_inclusao,
						aceitacao,
						status,
						cod_unsa,
						cod_unsa_inclusao
					) values (
						$num_eixo,
						$num_objetivo,
						$num_diretriz,
						$num_objetivoespecifico,
						$num_meta,
						$num_operacao,
						$num_descritivo,
						now(),
						'A',
						'A',
						$codigoUnidadeSaude,
						$codigoUnidadeSaude
					)";

			//echo $sql . "<br/>";
			//exit;
			
			if ( pg_query($sql) ){
				
				$sql2 = "select 
							num_acao_distrito 
						 from 
							" . $_SESSION["banco"] . ".acoes_distrito
						 where
							num_operacao = $num_operacao
						 and
							cod_unsa = $codigoUnidadeSaude
						 and
							cod_unsa_inclusao = $codigoUnidadeSaude
						 and
							num_descritivo = $num_descritivo
						 order by 
							num_acao_distrito DESC limit 1";
				
				//echo $sql2 . "<br/>";
				//exit;
				
				$resultado = pg_query( $sql2);
				$num_acao_distrito = pg_fetch_result($resultado,0,"num_acao_distrito");
				
				$this->numoperacaodistrito = $num_acao_distrito;
				
				$msg = "Inclusão da Ação realizada com sucesso!";
			} else {
				$msg = "Erro ao incluir a Ação";
				//$this->numoperacao = "";
				$this->numoperacaodistrito = "";
			}
			//echo $msg;
			//exit;
		} else {
			$msg = "Erro ao incluir a Ação no Módulo Descritivo.";
			//$this->numoperacao = "";
			$this->$numoperacaodistrito = "";
		}
		return $msg;
	}


	/**
	* Alterar Operação
	* @param int $num_eixo
	* @param int $num_objetivo
	* @param int $num_diretriz
	* @param int $num_objetivoespecifico
	* @param int $num_meta
	* @param int $num_operacao
	* @param string $des_operacao
	* @param string $peso
	* @param string $where
	* @return string $msg
	* @access	public
	*/
	function alteraroperacao($num_eixo, $num_objetivo, $num_diretriz, $num_objetivoespecifico, $num_meta, $num_operacao, $where,  $conexao){
		$des_operacao = $_POST["Des_Operacao"];
		$peso = $_POST["Peso"];
		$sql = "select num_descritivo, cod_unsa_inclusao from " . $_SESSION["banco"] . ".operacoes where num_operacao = $num_operacao";
		$resultado = pg_query( $sql);
		$num_descritivo = pg_fetch_result($resultado,0,"num_descritivo");
		if (($_SESSION["fcod_unsa"] == pg_fetch_result($resultado,0,"cod_unsa_inclusao")) || ($_SESSION["fnum_nivel_acesso"] == 1)){
			$sql2 = "select count(*) as total from " . $_SESSION["banco"] . ".operacoes where num_descritivo = " . pg_fetch_result($resultado,0,"num_descritivo");
			$resultado2 = pg_query( $sql2);
			$quantidade = pg_fetch_result($resultado2,0,"total");
			$sql2 = "select count(*) as total from " . $_SESSION["banco"] . ".acoes where num_descritivo = " . pg_fetch_result($resultado,0,"num_descritivo");
			$resultado2 = pg_query( $sql);
			while ($rs = pg_fetch_array($resultado)){
				$quantidade = $quantidade + $rs["total"];
			}
			// $quantidade = $quantidade +pg_fetch_result($resultado2, 0, "total"); 
			// pg_fetch_result($resultado2,0,"total");
			if ($quantidade > 1){
				// caso exista mais de uma operação com o mesmo descritivo, 
				// a alteração no texto do descritivo força a inclusão de um 
				// novo registro para esta operação
				// lembrando que ação utiliza a mesma tabela para descritivo
				$sql = "select des_descritivo from " . $_SESSION["banco"] . ".descritivos where num_descritivo=$num_descritivo";
				$resultado = pg_query( $sql);
				if (trim($des_operacao) != trim(decodificar(pg_fetch_result($resultado,0,"des_descritivo")))){
					// verificando se o descritivo novo é diferente, caso positivo
					// um novo registro de descritivo será utilizado para esta operação
					$sql = "insert into " . $_SESSION["banco"] . ".descritivos (des_descritivo, cod_unsa_inclusao, num_func_inclusao) values (";
					$sql .= "'" . decodificar($des_operacao) . "', ";
					if ($_SESSION["fcod_unsa"] != ""){
						$sql .= $_SESSION["fcod_unsa"] . ", ";
					} else {
						$sql .= "NULL,";
					}
					$sql .= $_SESSION["fnum_func"] . ") ";
					pg_query( $sql);
					$sql = "select num_descritivo from " . $_SESSION["banco"] . ".descritivos order by num_descritivo DESC limit 1";
					$resultado = pg_query( $sql);
					$num_descritivo = pg_fetch_result($resultado, 0, "num_descritivo");		
				}
			} else {
				$sql = "update " . $_SESSION["banco"] . ".descritivos set des_descritivo = '" . decodificar($des_operacao) . "' where num_descritivo=$num_descritivo";
				pg_query( $sql);
			}
			$sql = "update " . $_SESSION["banco"] . ".operacoes set num_descritivo='$num_descritivo', id_usuario_alteracao=" . $_SESSION["fnum_func"] . ", data_alteracao=now() where num_operacao=$num_operacao ";
			if (pg_query( $sql)){
				$msg = "Alteração da Ação realizada com sucesso!";
			} else {
				$msg = "Erro ao alterar a Ação";
			}
		} else {
			$msg = "Alteração Cancelada - Somente Funcionários da Unidade que incluiu este Registro podem alterá-lo";
		}
		return $msg;
	}


	/**
	* Existe Erro
	* @param int $nivel
	* @param int $codigo
	* @param string $where
	* @access	public
	*/
	function existeerro($nivel, $codigo, $where){
		// $nivel eixo=1, objetivogeral=2, diretriz=3, objetivo especifico=4, meta=5
		// $existe não=1, sim=2
		$existe = 1;
		if ($nivel == 1){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao in ";
			$sql .= "    (select num_operacao from " . $_SESSION["banco"] . ".operacoes ";
			$sql .= "  	 where $where and num_meta in ";
			$sql .= "       (select num_meta from " . $_SESSION["banco"] . ".metas ";
			$sql .= " 		where $where and num_objetivoespecifico in ";
			$sql .= "          (select num_objetivoespecifico from " . $_SESSION["banco"] . ".objetivos_especificos ";
			$sql .= "          where $where and num_diretriz in ";
			$sql .= "             (select num_diretriz from " . $_SESSION["banco"] . ".diretrizes ";
			$sql .= "             where $where and num_objetivo in ";
			$sql .= "                (select num_objetivo from " . $_SESSION["banco"] . ".objetivos ";
			$sql .= "                where $where and num_eixo = $codigo) ";
			$sql .= "             ) ";
			$sql .= "          ) ";
			$sql .= "       ) ";
			$sql .= "    ) ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}
		if ($nivel == 2){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao in ";
			$sql .= "    (select num_operacao from " . $_SESSION["banco"] . ".operacoes ";
			$sql .= "  	 where $where and num_meta in ";
			$sql .= "       (select num_meta from " . $_SESSION["banco"] . ".metas ";
			$sql .= " 		where $where and num_objetivoespecifico in ";
			$sql .= "          (select num_objetivoespecifico from " . $_SESSION["banco"] . ".objetivos_especificos ";
			$sql .= "          where $where and num_diretriz in ";
			$sql .= "             (select num_diretriz from " . $_SESSION["banco"] . ".diretrizes ";
			$sql .= "             where $where and num_objetivo = $codigo ";
			$sql .= "             ) ";
			$sql .= "          ) ";
			$sql .= "       ) ";
			$sql .= "    ) ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}
		if ($nivel == 3){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao in ";
			$sql .= "    (select num_operacao from " . $_SESSION["banco"] . ".operacoes ";
			$sql .= "  	 where $where and num_meta in ";
			$sql .= "       (select num_meta from " . $_SESSION["banco"] . ".metas ";
			$sql .= " 		where $where and num_objetivoespecifico in ";
			$sql .= "          (select num_objetivoespecifico from " . $_SESSION["banco"] . ".objetivos_especificos ";
			$sql .= "          where $where and num_diretriz = $codigo ";
			$sql .= "          ) ";
			$sql .= "       ) ";
			$sql .= "    ) ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}
		if ($nivel == 4){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao in ";
			$sql .= "    (select num_operacao from " . $_SESSION["banco"] . ".operacoes ";
			$sql .= "  	 where $where and num_meta in ";
			$sql .= "       (select num_meta from " . $_SESSION["banco"] . ".metas ";
			$sql .= " 		where $where and num_objetivoespecifico = $codigo ";
			$sql .= "       ) ";
			$sql .= "    ) ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}
		if ($nivel == 5){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao in ";
			$sql .= "    (select num_operacao from " . $_SESSION["banco"] . ".operacoes ";
			$sql .= "  	 where $where and num_meta = $codigo ";
			$sql .= "    ) ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}
		if ($nivel == 6){
			$sql = " select num_operacao, sum(peso) as total ";
			$sql .= " from " . $_SESSION["banco"] . ".acoes ";
			$sql .= " where $where and num_operacao = $codigo ";
			$sql .= " group by num_operacao ";
			$sql .= " having sum(peso) <> 100 ";
			$resultado = pg_query( $sql);
			if (pg_num_rows($resultado)>0){
				$existe = 2;
			}
		}

		if ($existe == 2){
			echo "<img src=\"./telas/images/red_6x7.gif\" border=\"0\">";
		}
	}

	/**
	* Soma Peso
	* @param int $nivel
	* @param int $codigo
	* @param string $where
	* @return int $msg
	* @access public
	*/
	function somapeso($codigo, $where){
		$sql = "select sum(peso) as total from " . $_SESSION["banco"] . ".acoes where $where and num_operacao=$codigo";
		$resultado = pg_query( $sql);
		$msg = pg_fetch_result($resultado,0,"total");
		return $msg;
	}

	/**
	* adicionafavorito
	* @param int $num_eixo
	* @return string $msg
	* @access	public
	*/
	function adicionafavorito($num_eixo, $num_objetivo, $num_diretriz, $num_objetivoespecifico, $num_meta, $num_operacao, $conexao){
		$sql = "select count(*) as total from " . $_SESSION["banco"] . ".favoritos where id_usuario=" . $_SESSION["fnum_func"] . " and caminho = '$num_eixo-$num_objetivo-$num_diretriz-$num_objetivoespecifico-$num_meta-$num_operacao' ";
		$resultado = pg_query( $sql);
		if (pg_fetch_result($resultado,0,"total")<=0){
			$sql = "insert into " . $_SESSION["banco"] . ".favoritos (id_usuario, caminho) values (" . $_SESSION["fnum_func"] . ", '$num_eixo-$num_objetivo-$num_diretriz-$num_objetivoespecifico-$num_meta-$num_operacao') ";
			if (pg_query( $sql)){
				$msg = "Favoritos Inserido com Sucesso!";
			} else {
				$msg = "Erro ao Inserir Favoritos";
			}
		} else {
			$msg = "Favoritos Já existente, Inserção cancelada!";
		}
		return $msg;
	}

}


?>